/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Datos.DB;

import Datos.Administrador;
import Datos.Persona;
import Excepciones.ActualizarDatosAdministradorException;
import Excepciones.BuscarDatosAdministradorException;
import Excepciones.GuardarDatosAdministradorException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class AdministradorDB {
    
public void grabarAdministrador(Administrador ad) throws SQLException, GuardarDatosAdministradorException{
    grabarPersona(ad);
    grabarAdministradorTabla(ad);
    grabarUsuario(ad);
    grabarPersonaUsuario(ad);
    
}
public boolean grabarPersona(Administrador ad) throws SQLException, GuardarDatosAdministradorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into persona(cedula, nombre, direccion, telefono) " +
                "values('"+ad.getCedula()+"', '"+ad.getNombre()+"', '" + 
                ad.getDireccion() +"', '"+ad.getTelefono() +"');";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
     } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new GuardarDatosAdministradorException("Error encontrado al buscar el Administrador");
        } 
}

public boolean grabarUsuario(Administrador ad) throws SQLException, GuardarDatosAdministradorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into usuario(nick, clave) " +
                "values('"+ad.getUsuario().getNombreUsuario()+"', '"+ad.getUsuario().getContraseña() + "' );";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new GuardarDatosAdministradorException("Error encontrado al buscar el Administrador");
        } 
}

private boolean grabarPersonaUsuario(Administrador ad) throws SQLException, GuardarDatosAdministradorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into personausuario(idpersona, idusuariop) " +
                "values('"+ad.getCedula()+"', '"+ad.getUsuario().getNombreUsuario()+ "' );";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new GuardarDatosAdministradorException("Error encontrado al buscar el Administrador");
        } 
}

public boolean grabarAdministradorTabla(Administrador ad) throws SQLException, GuardarDatosAdministradorException {
    try {
        OperacionesBase db = new OperacionesBase();
        
        String query = "insert into administrador(cedula) values('"+ad.getCedula()+"')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            throw new GuardarDatosAdministradorException("Error encontrado al buscar el Administrador");
        } 
}


public int modificar(Administrador ad) throws SQLException, ActualizarDatosAdministradorException {
    try{
        OperacionesBase db = new OperacionesBase();
        String query="update persona set nombre='" + ad.getNombre() + "', direccion='" + ad.getDireccion()+ "', telefono='"+ad.getTelefono()+"' where persona.cedula='"+ad.getCedula()+"'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    } catch (SQLException ex) {
        System.out.println(ex.getMessage());
        throw new ActualizarDatosAdministradorException("Error encontrado al modificar el Administrador");
    } 
}

public Administrador buscar(String nick) throws SQLException, BuscarDatosAdministradorException {
    
    try {
        OperacionesBase db = new OperacionesBase();
        String query="select * from usuario where nick ='"+nick+"'";        
        ResultSet resultado = db.seleccion(query);
        Administrador ad=new Administrador();
        if (resultado!=null) {
            resultado.next();
            ad.getUsuario().setNombreUsuario(resultado.getString(1));
            ad.getUsuario().setContraseña(resultado.getString(2));
        } 
        query="select persona.cedula, persona.nombre, persona.direccion, persona.telefono from personausuario,persona where personausuario.idusuariop='" + nick +"' and personausuario.idpersona=persona.cedula";
        resultado = db.seleccion(query);
        if (resultado!=null) {
            resultado.next();
            ad.setCedula(resultado.getString(1));
            ad.setNombre(resultado.getString(2));
            ad.setDireccion(resultado.getString(3));
            ad.setTelefono(resultado.getString(4));
        } 
        query="select * from administrador where cedula ='" + ad.getCedula()+"'";
        resultado = db.seleccion(query);
        if (resultado!=null) {
            resultado.next();
            ad.setCedula(resultado.getString(1));
        } 
        db.cerrarConexion();
        return ad;
       } catch (SQLException BuscarDatosAdministradorException) {
            System.out.println(BuscarDatosAdministradorException.getMessage());
            throw new BuscarDatosAdministradorException("Error encontrado al buscar el Administrador");
            
        }  
    }


public ArrayList listar() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query="select persona.cedula, persona.nombre, persona.direccion, persona.telefono from persona,administrador where persona.cedula=administrador.cedula ";
        ResultSet resultado = db.seleccion(query);
        Persona per=null;
        ArrayList personas=new ArrayList();
        while (resultado.next()) {
            per=new Persona();
            per.setCedula(resultado.getString(1));
            per.setNombre(resultado.getString(2));
            per.setDireccion(resultado.getString(3));
            per.setTelefono(resultado.getString(4));
            personas.add(per);
        }
        db.cerrarConexion();
        return personas;
    }

}


